package com.example.leetcode;

/**
 * 动态规划 ** 参考题解 **
 * 最佳买卖股票时机含冷冻期
 * 理解边界条件f[0][1]=0
 * 分类讨论
 * 我们目前持有一支股票，对应的「累计最大收益」记为 f[i][0]f[i][0]；
 * 我们目前不持有任何股票，并且处于冷冻期中，对应的「累计最大收益」记为 f[i][1]f[i][1]；（明天冷冻）
 * 我们目前不持有任何股票，并且不处于冷冻期中，对应的「累计最大收益」记为 f[i][2]f[i][2] （明天不冷冻）
 *
 */
public class Demo0309 {
    public int maxProfit(int[] prices) {
        int len =prices.length;
        int fun[][]=new int[len][3];
        fun[0][0]=-prices[0];
        fun[0][1]=0;
        fun[0][2]=0;
        for (int i = 1; i < len; i++) {
            fun[i][0]=Math.max(fun[i-1][0],fun[i-1][2]-prices[i]);//手持最大
            fun[i][1]=fun[i-1][0]+prices[i];//未持冷冻
            fun[i][2]=Math.max(fun[i-1][1],fun[i-1][2]); //未持未冷冻
        }

        return Math.max(fun[len-1][1],fun[len-1][2]);
    }
}
